import HTMLParser
import urllib
import re
import string


# website contenente la member list
urlString = "https://www.linx.net/pubtools/member-techlist.html"

# lista in cui memorizzare gli ASN
urlText = []

# file di output in cui scrivere gli ASN nella forma: IXP_ID ASN
pathOut = "ixp_members.txt"


# classe del parser
class Parse13 (HTMLParser.HTMLParser):
    
    # variabile da settare a True quando il tag potrebbe contenere l'ASN
    check = False
    
    # funzione eseguita quando il parser incontra un tag html
    # @param self: puntatore all'oggetto classe
    # @param tag: nome del tag
    # @param attrs: attributi del tag nella forma <name,value>
    def handle_starttag (self, tag, attrs):
        # gli ASN si trovano in un tag <div name="tcol5"... quindi setto check
        if tag == "td":
            for name,value in attrs:
                if name == "name" and value == "tcol5":
                    self.check = True
    
    # funzione eseguita quando vengono trovati dati nel corpo dei tag
    # @param self: puntatore all'oggetto classe
    # @param data: stringa da analizzare eventualmente contenente l'ASN              
    def handle_data (self, data):
        # se sono in un tag che potrebbe contenere l'ASN
        if self.check == True:
            # due ASN potrebbero trovarsi insieme separati da ','
            if data.find(',') != -1:
                # separo i due ASN e li analizzo uno per volta
                asn = data.split(',')
                for i in asn:
                    # se i e' effettivamente un ASN valido (spazio iniziale + sequenza di cifre)
                    if re.match("^ \d+$",i):
                        #rimuovo lo spazio iniziale
                        i = string.lstrip(i)
                        # aggiungo l'ASN alla lista se non c'e' gia'
                        if i not in urlText:
                            urlText.append(i)
            else:
                if re.match("^ \d+$",data):
                    data = string.lstrip(data)
                    if data not in urlText:
                        urlText.append(data)
        # resetto check una volta usato
        self.check = False


lparser = Parse13()
# passo al parser i dati da analizzare, ossia la pagina html
lparser.feed(urllib.urlopen(urlString).read())
fileOut = open(pathOut, "a")
# aggiorno il file contenente la lista dei membri degli IXP
for item in urlText:
    #print item # debug
    print >> fileOut, "13 %s" % item
fileOut.close()